package net.sf.calibur.engine;

/**
 * Event在executor pool中具体哪个executor（线程）进行执行的路由选择。
 * 对于游戏，典型的需要同一个玩家的事件，应该在同一个线程上执行，
 * 这样确保用户事件按照其发生的先后次序来处理。
 * 每个玩家事件的处理时间是不确定的，如果不放在同一个线程上，处理时随机
 * 的先后次序会给游戏逻辑带来很大的困扰。
 * 
 * 典型的路由算法是：从event中获得玩家角色的实例号playerId，用playerId
 * 对pool的size进行取模运算，让玩家事件按照角色实例号相对平均地分布到
 * pool中的多个executor上，并且一个玩家的事件，肯定是放在同一个executor上
 * 执行。
 * 
 * 应用可以根据自己的需要来实现这个路由算法，例如随机分配等。
 *
 */
public interface EventRouter {
	public Executor route(Event event, ExecutorPool pool);
}
